package main

import (
	"encoding/json"

	"jlpay-sdk-go/pkg/jlpay/demo"
	"jlpay-sdk-go/pkg/jlpay/models/openmerch/change"
	change2 "jlpay-sdk-go/pkg/jlpay/services/openmerch/change"
	"jlpay-sdk-go/pkg/jlpay/utils"
)

// 商户信息变更示例
func merchInfoChangeDemo(changeService *change2.ChangeService) {
	// 构建商户基础信息
	baseInfo := map[string]interface{}{
		"apply_id":     "b8659ea518d14c99b78b5ad000a4155a",
		"product_type": "01",
	}

	// 构建商户业务信息
	businessInfo := map[string]interface{}{
		"merch_no": "849584358140108", // 使用cursor中的商户号
	}

	// 构建商户身份信息（包含敏感字段，将被自动加密）
	identificationInfo := map[string]interface{}{
		"id_card_name":         "张三",                 // 经营者/法人姓名（敏感字段）
		"id_card_english_name": "Zhang San",          // 经营者/法人英文名称（敏感字段）
		"id_card_no":           "445221199705024935", // 经营者/法人身份证件号码（敏感字段）
		"legal_person_phone":   "13800138000",        // 经营者/法人手机号码（敏感字段）
		"license_name":         "北京科技有限公司",           // 商户法定名称
		"business_scope":       "软件开发、技术服务",          // 经营范围
		"license_address":      "北京市朝阳区xxx街道",        // 注册地址
		"license_pic":          "group1/M00/5E/DB/rBQFm2cRyWGAUF_zAAS9l9WA_pE1351477",
	}

	// 构建结算信息
	settleInfo := map[string]interface{}{}

	// 构建请求参数
	requestData := map[string]interface{}{
		"base_info":           baseInfo,
		"business_info":       businessInfo,
		"identification_info": identificationInfo,
		"settle_info":         settleInfo,
	}

	request := change.NewMerchInfoChangeRequest()
	request.SetRawRequestMap(requestData)

	// 序列化请求数据并打印
	requestJSON, _ := json.Marshal(requestData)
	utils.Debugf("商户信息变更请求数据: %s", string(requestJSON))

	// 发送请求（敏感字段将被自动加密）
	response, err := changeService.ChangeMerchInfo(request)
	if err != nil {
		utils.Errorf("商户信息变更请求失败: %v", err)
		return
	}

	// 处理响应 - 使用BaseResponse接口的HandleResponse方法
	response.HandleResponse("商户信息变更")
}

func main() {
	// 设置日志级别为info，显示详细的调试信息
	utils.SetLogLevel("info")

	utils.Info("=============================")
	utils.Info("===== 商户信息变更示例 开始 =====")
	utils.Info("=============================")

	// 创建配置对象和变更服务
	config := demo.CreateDemoConfig()
	changeService := change2.NewChangeService(config)

	merchInfoChangeDemo(changeService)

	utils.Info("=============================")
	utils.Info("===== 商户信息变更示例执行完毕 =====")
	utils.Info("=============================")
}
